Computer systems usually have limited memory addressing capabilities. The typical processor or system is designed to allow processes to address memory in a memory space up to a certain size limit. Software applications are often compiled to operate within the limited memory space. It is often difficult or expensive to upgrade such systems when the next generation systems with increased memory size limit become available. For example, many of the existing systems support a 32-bit architecture that limits the addressable memory space of processes to approximately 232, or 4 gigabytes. As programs become more sophisticated and consume more memory, 4 gigabytes of memory space may become inadequate. The next generation 64-bit systems provide much greater memory addressing capabilities, however, migrating from 32-bit systems to 64-bit systems tend to be an expensive proposition because of the software upgrades required. Since many applications are compiled specifically for one type of system, upgrading from a 32-bit system to a 64-bit system would typically require that these legacy 32-bit applications be replaced with new applications specifically compiled for the 64-bit platform, therefore increasing the cost of the upgrade.
Some systems that include multiple software components configured to collaborate in 32-bit environments face additional barrier to upgrades. For example, an application may interact with drivers or libraries to perform desired functions in a 32-bit environment. If any of the components is not available for the 64-bit platform, it is likely that the system as a whole cannot successfully migrate to a 64-bit system.
It would be desirable if legacy software can take advantage of the larger memory space supported by newer systems. It would also be desirable if software components configured to operate in environments that support different memory space sizes can interoperate transparently, without requiring recompilation.